<?php defined('SYSPATH') or die('No direct script access.') ;
/**
 * 管理员权限资源模型
 *
 * @author  Yellow.Chow <aultoale@gmail.com>
 * @version $Id: resource.php 1 2014-01-13 15:05:51Z zhouyl $
 * @license http://www.gnu.org/licenses/gpl-3.0.html    GPL 3
 */
class Model_Manager_Resource extends Model
{

    /**
     * 获取所有资源列表
     *
     * @return array
     */
    public function all()
    {
        return DB::select()
            ->from('manager_resources')
            ->order_by('sort_order', 'ASC')
            ->fetch_all();
    }

    /**
     * 检查资源 ID 是否存在
     *
     * @param  int  $res_id
     * @return array
     */
    public function get($res_id)
    {
        return DB::select()
            ->from('manager_resources')
            ->where('res_id', '=', $res_id)
            ->fetch_row();
    }

    /**
     * 添加资源
     *
     * @param  array  $data
     * @return bool
     */
    public function add(array $data)
    {
        $v = $this->_validate($data);
        $this->validation($v);
        if ( ! $v->check() OR ! empty($this->_errors))
        {
            return FALSE;
        }

        $data = array (
            'res_name' => $v->res_name,
            'sort_order' => (int) $v->sort_order,
        );

        // 写入资源信息
        DB::insert('manager_resources', $data)->execute();

        // 重新加载权限
        Manager::instance()->refresh();

        return TRUE;
    }

    /**
     * 编辑资源
     *
     * @param  int   $res_id
     * @param  array $data
     * @return bool
     */
    public function edit($res_id, array $data)
    {
        $resource = $this->get($res_id);

        if ( ! $resource)
        {
            return $this->error('res_id', 'not_found');
        }

        $v = $this->_validate($data);
        $this->validation($v);
        if ( ! $v->check() OR ! empty($this->_errors))
        {
            return FALSE;
        }

        $set = array (
            'res_name' => $v->res_name,
            'sort_order' => (int) $v->sort_order,
        );

        // 更新资源信息
        DB::update('manager_resources', $set)
            ->where('res_id', '=', $res_id)
            ->execute();

        // 重新加载权限
        Manager::instance()->refresh();

        return TRUE;
    }

    /**
     * 数据验证
     *
     * @param  array  $data
     * @return Validation
     */
    protected function _validate(array $data)
    {
        return Validation::factory($data)
            ->rule('res_name', 'not_empty')
            ->rule('res_name', 'regex', array(':value', '/^[^\'\"\:;,\<\>\?\/\\\*\=\+\{\}\[\]\)\(\^%\$#\!`\s]+$/'))
            ->rule('sort_order', 'numeric');
    }

    /**
     * 删除资源
     *
     * @param  int  $res_id
     * @return bool
     */
    public function del($res_id)
    {
        // 删除资源数据
        DB::delete('manager_resources')->where('res_id', '=', $res_id)->execute();

        // 删除会员资源数据
        DB::delete('manager_privileges')->where('res_id', '=', $res_id)->execute();

        // 重新加载权限
        Manager::instance()->refresh();

        return TRUE;
    }
}